perm filename CRE[CRE,BGB]4 blob sn#039854 filedate 1973-05-08 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00025 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00007 00002	CRE3 -  CART'S EYE  -  CONTOUR,REGION,EDGE  -  BGB  -  APRIL 1973.
C00009 00003	INITIALIZATION - SA: AND REE:
C00011 00004	SUBR(TTY)	TTY LISTEN.
C00012 00005	  ---		COMMAND JUMP TABLE ASCII 00 TO 37.
C00013 00006	  ---		COMMAND JUMP TABLE ASCII 40 TO 77.
C00014 00007	  ---		COMMAND JUMP TABLE ASCII 100 TO 137.
C00016 00008	XWINDO:		WINDOW SCROLLING COMMANDS.
C00017 00009	XLINK:		LINK FOLLOWING COMMANDS.
C00019 00010	XRESET "Z" COMMAND.	 NEXIMG.
C00022 00011	SUBR(XNAME)		"N" - NAME THE FILM.
C00023 00012	XFLAGS:
C00024 00013	XINPUT:			"I" - INPUT COMMANDS.
C00025 00014	XTABLE:
C00026 00015	SUBR(XCUT).		MAKE CUTS COMMAND "C".
C00028 00016	SUBR(XCUTS).		MAKE CUTS COMMAND "Q".
C00029 00017	SUBR(XTAKE).		"T" TAKE TELEVISION PICTURE.
C00030 00018	SUBR(XSELECT).		"S" SELECT CAMERA.
C00032 00019	SUBR(XXPAND)		HISTOGRAM CUT HIGH AND CUT LOW.
C00034 00020	SUBR(REMAP)		RE MAP TVBUF.
C00035 00021	AWIDTH - SELECT ARC WIDTH.
C00038 00022	XCART.		CART CONTROL COMMANDS.
C00040 00023		CART SPACE WAR JOB.
C00042 00024	XHELP:
C00045 00025	
C00046 ENDMK
C⊗;
;CRE3 -  CART'S EYE  -  CONTOUR,REGION,EDGE  -  BGB  -  APRIL 1973.
TITLE CRE

	EXTERN QBLK,SX,SY,DEL,MAG
	EXTERN DPYBLK,DPYIMG,DPYHIS,CROP
	EXTERN MKCON
	EXTERN TVXGP,PLOTO,MORCOR
	EXTERN QIMAGE,QNODE

	INTERN FLGBGB,FLGDD,FLGIII
	INTERN CTRL,META,CHR,VCUT
	INTERN ARCWID

;CONTROL FLAGS.
	INTERN FLGHIS
	FLGHIS:0		;HISTOGRAM IS VALID.
	VCUT:-14		;VECTOR DISPLAY CONTRAST THRESHOLD.
	FLGBGB:0		;RUNNING UNDER A BGB PPPN.
	FLGDD:0			;RUNNING AT A DATA DISC.
	FLGIII:0		;RUNNING AT A III DISPLAY.

;ARC WIDTH PROPORTIONAL TO CONTRAST TABLE FOR MKARCS.
ARCWID:
	FOR I←0,3{2.0↔}
	FOR I←4,5{1.5↔}
	FOR I←6,12{1.25↔}
	FOR I←13,17{1.0↔}
	FOR I←20,37{1.0↔}
	FOR I←40,77{0.7↔}
	0

;TELETYPE COMMAND STATE.
	DECLARE{CTRL,META,CHR}
;INITIALIZATION - SA: AND REE:
;----------------------------------------------------------------

	PDL: BLOCK 100

;START ADDRESS
SA:	LAC 17,[IOWD 100,PDL]
	CALL(MORCOR)
	CALL(SEGTV)

;RE-ENTRY ADDRESS.
REE:	LACI .↔DAC 124
	SETO↔GETLIN	;GET LINE CHARACTERISTICS.
	CAMN[-1]↔SETZ	;JOB DETACHED.
	DZM FLGIII↔TLNE(1B0)↔SETOM FLGIII
	DZM FLGDD↔ TLNE(1B4)↔SETOM FLGDD
	PPIOT 2,-=250
	PPIOT 3,3003
	DZM QBLK
	MOVEI 20↔CRLF↔SOJG .-1
	SETZ↔GETPPN↔CDR
	CAIN'BGB'↔SETOM FLGBGB
	LAC 17,[IOWD 100,PDL]
	CALL(CROP)
	CALL(DPYIMG)
	PUSHJ TTY
	EXIT
;6/12/72----------------------------------------------------------
;TELETYPE COMMAND STATE.

;SEGTV - GET OLD TVSEG.
SUBR(SEGTV)-------------------------------------------------------
	EXTERN HI
;MAKE A NEW TVSEG.
	LACI HI
	CORE2↔GO[FATAL(AIN'T NO CORE UP YONDER.)]
	LAC[SIXBIT/*CRE3*/]↔SETNM2↔JFCL
	SETZ↔SEGNUM↔DAC TVSEG
	LAC[%+1(%)]↔DZM %↔BLT HI-1
	POP0J
TVSEG:0
;16/12/72---------------------------------------------------------
SUBR(TTY)	;TTY LISTEN.
BEGIN TTY;--------------------------------------------------------
L0:	CRLF
L1:	OUTCHR["*"]
L2:	INCHRW
	DZM CTRL↔TRZE 200↔SETOM CTRL
	DZM META↔TRZE 400↔SETOM META
	CAIN 0,15↔GO L1+1	;CARRIAGE RETURN.
	CAIN 0,12↔GO L1		;LINE FEED.
	CAIL 140↔SUBI 40	;SUPPRESS LOWER CASE.
	DAC CHR
	LAC 1,CHR
	PUSHJ P,@A00(1)
	GO L0			;CRLF-STAR.
	GO L2			;NOTHING.
	GO L1			;STAR.
BEND TTY; BGB 19 APRIL 1973 --------------------------------------
;  ---		COMMAND JUMP TABLE ASCII 00 TO 37.
A00:	NOP	;null
	NOP	;"↓"
	NOP	;"α"
	NOP	;"β"

	XLINK	;"∧"
	NOP	;"¬"
	NOP	;"ε"
	NOP	;"π"

	NOP	;"λ"
	NOP	;tab
	NOP	;lf
	NOP	;vt

	NOP	;ff
	NOP	;cr
	NOP	;"∞"
	NOP	;"∂"

	XLINK	;"⊂"
	XLINK	;"⊃"
	XLINK	;"∩"
	XLINK	;"∪"

	NOP	;"∀"
	NOP	;"∃"
	XLINK	;"⊗"
	XMOVIE	;"↔" RUN THRU THE IMAGES AS A MOVIE.

	NOP	;"_"
	XTDPY	;"→"
	NOP	;"~"
	NOP	;"≠"

	XLINK	;"≤"
	XLINK	;"≥"
	NOP	;"≡"
	XLINK	;"∨"

;  ---		COMMAND JUMP TABLE ASCII 40 TO 77.
A40:	XWINDO	;" "
	XLINK	;"!"
	NOP	;"""
	XCRLFS	;"#"

	NOP	;"$"
	NOP	;"%"
	NOP	;"&"
	NOP	;"'"

	XWINDO	;"("
	XWINDO	;")"
	XWINDO	;"*"
	XLINK	;"+"

	XLINK	;","
	XWINDO	;"-"
	XLINK	;"."
	XWINDO	;"/"

	NOP	;"0"
	NOP	;"1"
	NOP	;"2"
	NOP	;"3"

	NOP	;"4"
	NOP	;"5"
	NOP	;"6"
	NOP	;"7"

	NOP	;"8"
	NOP	;"9"
	XWINDO	;":"
	XWINDO	;";"

	XLINK	;"<"
	NOP	;"="
	XLINK	;">"
	XHELP	;"?"
;  ---		COMMAND JUMP TABLE ASCII 100 TO 137.

A100:	NOP		;"@"
	NOP   		;"A" AUTOMATIC TURNTABLE PERCEPTION.
	XCART;         *;"B" DRIVE BACKWARDS.
	XCUT  		;"C" MAKE THRESHOLD CUT.

	XFLAGS		;"D" DISABLE PROCESSES.
	XFLAGS		;"E" ENABLE PROCESSES.
	XCART;	       *;"F" DRIVE FORWARDS.
	NOP		;"G"

	DPYHIS		;"H" HISTOGRAM, "αH" ,"βH" BI-MODAL CUT.
	XINPUT		;"I" INPUT.
	XXPAND		;"J" TWO CUTS AT 5% FROM ENDS.
	NOP		;"K"

	XCART;	       *;"L" TURN LEFT. "αL" PAN CAMERA LEFT.
	XMATCH		;"M" MATCH AND LINK IMAGES IN TIME.
	XNAME		;"N" NAME THE FILM.
	XOUTPUT		;"O" OUTPUT.

	PLOTO 		;"P" PLOT OUTPUT FILE.
	XCUTS 		;"Q" EQUI-SPACED CUTS.
	XCART;	       *;"R" TURN RIGHT. "αR" PAN CAMERA RIGHT.
	XSELECT		;"S" SELECT CAMERA, "αS" BCLIP, "βS" TCLIP.

	XTAKE		;"T" TAKE TELEVISON PICTURE. "αT" SIXBIT.
	NOP		;"U"
	XCART		;"V" XCART DIAGONOSTIC COMMAND MODE.
	AWIDTH		;"W" SET ARC WIDTH TABLE.

	TVXGP		;"X"	XEROX OUTPUT.
	XTABLE		;"Y"	TURN TABLE.
	XRESET		;"Z"	ZERO DATA BUFFERS.
	NOP		;"[" OR "{"

	XWINDO		;"\" OR "|"
	NOP		;"]" OR ALT
	NOP		;"↑" OR "}"
	XTDPY		;"←" OR RUB

NOP:	OUTCHR[9]↔OUTCHR CHR↔OUTSTR[ASCIZ/ NO OPERATION./]
	POP0J
XWINDO:		;WINDOW SCROLLING COMMANDS.
BEGIN XWINDO;-----------------------------------------------------
	LAC CHR
	CAIN 0," "↔GO L2
	CAIN 0,":"↔GO[LAC SX↔FAD DEL↔DAC SX↔GO L2]
	CAIN 0,";"↔GO[LAC SX↔FSB DEL↔DAC SX↔GO L2]
	CAIN 0,")"↔GO[LAC SY↔FAD DEL↔DAC SY↔GO L2]
	CAIN 0,"("↔GO[LAC SY↔FSB DEL↔DAC SY↔GO L2]
	CAIN 0,"/"↔GO[LAC DEL↔FSC -1↔DAC DEL↔GO L2]
	CAIN 0,"\"↔GO[LAC DEL↔FSC 1↔DAC DEL↔GO L2]
	CAIN 0,"*"↔GO[LAC MAG↔FMP[1.5]↔DAC MAG↔GO L2]
	CAIN 0,"-"↔GO[LAC MAG↔FDV[1.5]↔DAC MAG↔GO L2]
L2:	CALL(CROP)↔CALL(DPYIMG)↔AOS(P)↔POP0J
BEND XWINDO; BGB 19 APRIL 1973 -----------------------------------
XLINK:		;LINK FOLLOWING COMMANDS.

COMMENT/ Replace the QBLK with one of its own links. Empty links
and demands for positions that are not links are ignored by means
of checking the node's relocation bits./

BEGIN XLINK;------------------------------------------------------
	LAC CHR
	CAIN"!"↔GO[DZM QBLK↔GO L]
	CAIE"⊗"↔CAIN"+"↔GO[LAC FILM↔DAC QBLK↔GO L]
	SKIPN 2,QBLK↔POP0J		;GET THE QBLK NODE.
	RELOC 3,2		;RELOCATION BITS.
	CAIN","↔LACI 2000	;WORD0.
	CAIN"."↔LACI 1000
	CAIN"<"↔LACI 2001	;WORD1.
	CAIN">"↔LACI 1001
	CAIN"∪"↔LACI 2003	;WORD3.
	CAIN"∩"↔LACI 1003
	CAIN"≤"↔LACI 2004	;WORD4.
	CAIN"≥"↔LACI 1004
	CAIN"⊂"↔LACI 2005	;WORD5.
	CAIN"⊃"↔LACI 1005
	CAIN"∨"↔LACI 2006	;WORD6.
	CAIN"∧"↔LACI 1006
	TRNN 3000↔POP0J		;NO HIT ON COMMAND CHR.
	DAC 1↔ANDI 1,7↔LSH -9
	LDB 3,[POINT 3,3,20↔POINT 3,3,23↔0↔POINT 3,3,26
	       POINT 3,3,29↔POINT 3,3,32↔POINT 3,3,35](1)
	TDNN 3,0↔POP0J		;AIN'T NO LINK THERE.
	ADD 1,2↔LAC 3,(1)
	TRNN 0,1↔MOVSS 3↔CDR 3
	SKIPE↔DAC QBLK
L:	LAC 1,QBLK↔TEST 1,IBIT↔GO .+3
	DAC 1,QIMAGE↔CALL(DPYIMG)
	CALL(DPYBLK)
	AOS(P)↔POP0J
BEND XLINK; BGB 19 APRIL 1973 ------------------------------------

XCRLFS:	LACI 20↔CRLF↔SOJG .-1↔POP0J
;XRESET "Z" COMMAND.	 NEXIMG.
SUBR(XRESET)------------------------------------------------------
BEGIN XRESET
	EXTERN AVAIL,BLKCNT,FILM,OLD44
	SKIPE META↔GO[SETZB 0,1↔UPGIOT 16,↔POP0J]
	SKIPE CTRL↔GO L
	DZM QBLK↔DZM QIMAGE
	LAC OLD44↔CORE↔JFCL↔DZM OLD44
	DZM AVAIL↔DZM BLKCNT↔DZM FILM
	CALL(MORCOR)
L:	DZM SX↔DZM SY
	LAC[32.0]↔DAC DEL
	LAC[3.4]↔DAC MAG
	CALL(CROP)
	CALL(DPYIMG)
	POP0J
BEND XRESET; BGB 31 DECEMBER 1972 --------------------------------

SUBR(XMOVIE)------------------------------------------------------
BEGIN XMOVIE;NEXT IMAGE - BGB - 11 DEC 72.
	SKIPN 1,QIMAGE↔POP0J
	CCW 2,1↔SKIPE CTRL↔CW 2,1
	DAC 2,QIMAGE
	CALL(DPYIMG)
	SKIPE META↔GO[INCHRS↔GO XMOVIE↔POP0J]
	POP0J
BEND;12/11/72-----------------------------------------------------

SUBR(XMATCH)		"M" - MATCH AND LINK IMAGES IN TIME.
BEGIN XMATCH;-----------------------------------------------------
	EXTERN CMCNII
	LAC 2,FILM↔SON 2,2	;FIRST IMAGE TAKEN.
	CW 2,2			; LAST  IMAGE TAKEN.
	LAC 1,2↔CW 1,1		;PENULT IMAGE TAKEN.
	CALL(CMCNII,1,2)
	POP0J
BEND XMATCH; BGB 16 APRIL 1973 -----------------------------------

XTDPY:;		"←" "→" DISPLAY TIMED LINKED POLYGON OF QBLK.
	EXTERN TIMDPY
	SKIPN 1,QBLK↔POP0J
	TEST 1,PBIT↔POP0J
	PUSH P,QBLK
	LAC CHR↔CAIN "←"↔GO[PUSHJ P,TIMDPY+1↔POP0J]
	PUSHJ P,TIMDPY↔POP0J
SUBR(XNAME)		"N" - NAME THE FILM.
BEGIN XNAME;------------------------------------------------------
	EXTERN STADPY,FNAME,FNAME6
	OUTSTR[ASCIZ/	FILM = /]
	LAC 1,[POINT 7,FNAME,-1]	;ASCII.
	LAC 2,[POINT 6,FNAME6,-1]	;SIXBIT.
	LACI 3,6
L:	INCHWL
	CAIN 15↔GO[INCHWL↔GO EOL]
	CAIL"a"↔SUBI 40
	IDPB 1
	SUBI 40
	IDPB 2
	SOJG 3,L
EOL:	SETZ↔SKIPE 3↔GO[IDPB 1↔IDPB 2↔SOJA 3,.-1]
	CALL(STADPY)
	AOS(P)↔AOS(P)↔POP0J
BEND XNAME; BGB 17 APRIL 1973 ------------------------------------

XFLAGS:
BEGIN XFLAGS;-----------------------------------------------------
	EXTERN ENEST,ECONT,ESMOO,ECOMP

	LAC CHR↔CAIN"E"↔GO L9
	SETZM ENEST↔SETZM ECONT↔SETZM ESMOO↔SETZM ECOMP↔POP0J
L9:	SETOM ENEST↔SETOM ECONT↔SETOM ESMOO↔SETOM ECOMP↔POP0J
BEND  XFLAGS; BGB 20 APRIL 1973 ----------------------------------
XINPUT:;			"I" - INPUT COMMANDS.
	EXTERN CREIN,TVDSKI
	SKIPN CTRL↔GO[DZM FLGHIS
	CALL(TVDSKI,[-1])↔GO SKPOPJ]
	CALL(CREIN)
	LAC 1,FILM↔SON 1,1↔DAC 1,QIMAGE
	CALL(DPYIMG)
SKPOPJ:	AOS(P)↔AOS(P)↔POP0J

XOUTPUT:;		"O" - OUTPUT COMMANDS.
	EXTERN CREOUT,TVDSKO
	SKIPN CTRL↔GO[
	CALL(TVDSKO)↔GO SKPOPJ]
	CALL(CREOUT)↔GO SKPOPJ

XTABLE:
BEGIN XTABLE
	LACI =12↔DAC TICKS#		;1 SECOND.
	LAC META↔DAC FLG#		;DIRECTION OF ROTATION.
	LACI 1↔SKIPE CTRL↔AOS↔DAC SPEED#
	SPCWAR 5,SW.JOB
	SKIPL TICKS↔GO .-1
	SPCWAR'SSW'
	POP0J

SW.JOB:	SOSG TICKS↔SETZM SPEED
	MOVE 1,SPEED↔ANDI 1,3
	SKIPE FLG↔GO GO.CW
GO.CCW:	CONSO 40↔DATAO 500,[177(5)↔020(5)↔040(5)↔060(5)](1)↔DISMIS
GO.CW:	CONSO 40↔DATAO 500,[177(5)↔140(5)↔120(5)↔120(5)](1)↔DISMIS
STOP:	CONSO 40↔DATAO 500,[177(5)]↔DISMIS
BEND XTABLE
SUBR(XCUT).		;MAKE CUTS COMMAND "C".
BEGIN XCUT;-------------------------------------------------------

;MAKE CUT COMMAND BEGINS HERE.
	DZM FFLAG#↔LAC 1,QBLK
	CAMN 1,FILM↔SETOM FFLAG#
	DZM FRAME#

	DZM QQ2↔DZM QQ3
L1:	SETZ 1,↔INCHWL
	CAIN 15↔GO[CALL(L4)↔GO L2]
	CAIL 0,"0"↔CAILE 0,"7"↔GO[CALL(L4)↔GO L1]
	IMULI 1,=8↔ANDI 17↔ADD 1,0↔GO L1+1

L2:	INCHWL
	SKIPN FFLAG↔GO L3↔AOS FRAME
	CALL(TVDSKI,FRAME)↔SKIPN 1↔POP0J
L3:	SKIPE META↔GO L5
	CALL(MKCON,QQ2,QQ3)
	CALL(DPYIMG)
	SKIPN FFLAG
	POP0J
	GO L2+1

	DECLARE{QQ2,QQ3}

L4:	SKIPN 1↔POP0J
	CAIL 1,=64↔POP0J
	MOVNS 1↔SETZ 3,
	SLACI 2,1B18↔LSHC 2,(1)
	IORM 2,QQ2↔IORM 3,QQ3
	POP0J
L5:	SKIPN CTRL↔GO L3+2
	CALL(VICXGP,QQ2,QQ3)↔EXTERN VICXGP
	POP0J
BEND;1/17/73------------------------------------------------------

SUBR(XCUTS).		;MAKE CUTS COMMAND "Q".
BEGIN XCUTS;------------------------------------------------------
	SETZ 1,
	SKIPE CTRL↔LACI 1,1
	SKIPE META↔ADDI 1,2
	CALL(MKCON,{Q1(1)},{Q2(1)})
	CALL(DPYIMG)
	POP0J

;THREE, SEVEN, EIGHT OR FIFTEEN CUTS  -  EQUALLY SPACED.
Q1:	    1B16     +1B32
	1B8+1B16+1B24+1B32  ↔  1B4+1B12+1B20+1B28
	1B8+1B16+1B24+1B32  +  1B4+1B12+1B20+1B28
Q2:	    1B12
	1B4+1B12+1B20 ↔ 1B0+1B8+1B16+1B24
	1B4+1B12+1B20 + 1B0+1B8+1B16+1B24

BEND XCUTS; BGB 9 DECEMBER 1972 -----------------------------------

SUBR(XTAKE).		"T" TAKE TELEVISION PICTURE.
BEGIN XTAKE
	EXTERN TVIN6,TVIN4
	SETOM FLGHIS		;HISTOGRAM WILL BE ACCUMULATED.
	SLACI %+17↔LAPI .+3
	SPCWGO↔SKIPA↔DISMIS		;LOCKIN CORE.
	SKIPE CTRL↔GO[
	CALL(TVIN6)↔GO .+2]
	CALL(TVIN4)
	SPCWAR'SSW'↔POP0J		;UNLOCK CORE.
BEND XTAKE;(BGB)14-DEC-72
;_________________________________________________________________
SUBR(XSELECT).		"S" SELECT CAMERA.
BEGIN XSELECT;----------------------------------------------------
	EXTERN TVCLIP
	LAC CTRL↔AND META↔SKIPE↔GO L4
	SKIPE CTRL↔GO L2↔SKIPE META↔GO L3

;SELECT CAMERA.
L1:	LDB[POINT 2,TVCLIP,26]↔IORI 60
	OUTSTR[ASCIZ/	CHANGE CAMERA /]
	OUTCHR↔OUTSTR[ASCIZ/ TO /]
	INCHRW↔CAIE 15↔DPB[POINT 2,TVCLIP,26]↔POP0J

;SELECT BOTTOM CLIP LEVEL.
L2:	LDB[POINT 3,TVCLIP,20]↔IORI 60
	OUTSTR[ASCIZ/	CHANGE BCLIP /]
	OUTCHR↔OUTSTR[ASCIZ/ TO /]
	INCHRW↔CAIE 15↔DPB[POINT 3,TVCLIP,20]↔POP0J

;SELECT TOP CLIP LEVEL.
L3:	LDB[POINT 3,TVCLIP,23]↔IORI 60
	OUTSTR[ASCIZ/	CHANGE TCLIP /]
	OUTCHR↔OUTSTR[ASCIZ/ TO /]
	INCHRW↔CAIE 15↔DPB[POINT 3,TVCLIP,23]↔POP0J

;SHRINK NODE SPACE.
L4:	CALL(SHRINK)↔EXTERN SHRINK
	POP0J

BEND XSELECT; BGB 6 DECEMBER 1972 --------------------------------
SUBR(XXPAND);		HISTOGRAM CUT HIGH AND CUT LOW.
BEGIN XXPAND;-----------------------------------------------------
	EXTERN HISTO,HISTOG
	ACCUMULATORS{Q1,Q2,HI,LO}
	SKIPN CTRL↔GO L1
	LACI 1,77↔SETZ↔DAC 0,TVMAP(1)↔AOS↔SOJGE 1,.-2↔GO L3
L1:	CALL(HISTOG)
	LACI HI,77↔DZM LO↔SETZB Q1,Q2
	LACI 6↔IMULI =62208↔IDIVI =100↔DAC 1	;6% RULE.

;COME IN FROM THE EXTREMES 6 PER CENT.
	SETZ↔ADD HISTO(LO)↔CAMGE 1↔AOJA LO,.-2
	SETZ↔ADD HISTO(HI)↔CAMGE 1↔SOJA HI,.-2
L2:	CAML LO,HI↔POP0J

;LOOK FOR LOCAL MINIMUM.
;	LAC HISTO(LO)↔CAML HISTO+1(LO)↔AOJA LO,L2
;	LAC HISTO(LO)↔CAML HISTO-1(LO)↔AOJA LO,L2
;	LAC HISTO(HI)↔CAML HISTO+1(HI)↔SOJA HI,L2
;	LAC HISTO(HI)↔CAML HISTO-1(HI)↔SOJA HI,L2

;MAKE THE TV MAP.
	SETZB 0,1
	DAC 0,TVMAP(1)↔CAMG 1,LO↔AOJA 1,.-2	;00 TO LO → 00.
	LACI 77↔LACI 1,77
	DAC 0,TVMAP(1)↔CAML 1,HI↔SOJA 1,.-2	;77 TO HI → 77.
	SLACI 2,77↔LAC 1,HI↔SUB 1,LO↔IDIV 2,1	;DELTA INTENSITY.
	SETZ↔LAC 1,LO↔AOS 1
	HLRZM 0,TVMAP(1)↔ADD 0,2
	CAMGE 1,HI↔AOJA 1,.-3
L3:	CALL(REMAP)
	POP0J
BEND XXPAND;------------------------------------------------------

SUBR(REMAP);		RE MAP TVBUF.
BEGIN REMAP;------------------------------------------------------
	EXTERN TVBUF,FLGHIS
	DZM FLGHIS
	LAC[XWD L,2]↔BLT 8↔GO 2
L:	ILDB 1,7	;2
	LAC 1,TVMAP(1)	;3 REPLACE BYTE ACCORDING TO TABLE TVMAP.
	DPB 1,7
	SOJG 8,2	;5
	POP0J		;6
	POINT 6,TVBUF	;7 INITIAL TV BUFFER POINTER.
	=62208		;8 NUMBER OF PIXELS.
BEND REMAP; BGB 6 MAY 1973 ----------------------------------------

INTERN TVMAP
TVMAP:	BLOCK 100

;AWIDTH - SELECT ARC WIDTH.
SUBR(AWIDTH)------------------------------------------------------
BEGIN AWIDTH
	EXTERN REALIN
	ACCUMULATORS{DEL,XLO,XHI,X1,X2}
	TDCA X2,X2↔INCHWL
L1:	OUTSTR[ASCIZ/	#/]

	INCHRW↔CAIN 15↔GO L1-1
	CAIL"0"↔CAILE"7"↔GO L4
	ANDI 7↔LSH 3↔DAC 1

	INCHRW↔CAIN 15↔GO L1-1
	CAIL"0"↔CAILE"7"↔GO L4
	ANDI 7↔ADD 1,0↔EXCH 1,X2↔DAC 1,X1

L2:	CALL(TYPOUT)
	CALL(REALIN)
	JUMPLE .+3↔CAMGE[100.0]↔CALL(ALTER)
	CAIE 1,12↔GO .+3↔OUTCHR[15]↔AOJA X2,L3
	CAIN 1,15↔INCHWL
	CAIE 1,175↔GO L1↔CRLF↔SOJA X2,L3
L3:	CAILE X2,77↔LACI X2,77
   	CAIGE X2,00↔LACI X2,00
	LAC[ASCIZ/	#00/]
	DPB X2,[POINT 3,0,27]↔ROT X2,-3
	DPB X2,[POINT 3,0,20]↔ROT X2, 3
	OUTSTR↔GO L2
L4:	CRLF↔POP0J

TYPOUT:	LAC ARCWID(X2)↔FMPR[100.0]↔FIXX
	IDIVI 0,=1000
	SKIPE↔IORI"0"↔IORI" "   ↔DPB 0,[POINT 7,STR,13]
	IDIVI 1,=100 ↔IORI 1,"0"↔DPB 1,[POINT 7,STR,20]
	IDIVI 2,=10  ↔IORI 2,"0"↔DPB 2,[POINT 7,STR,34]
	              IORI 3,"0"↔DPB 3,[POINT 7,STR+1,6]
	OUTSTR STR↔POP0J
STR:	ASCIZ/	99.99	/

ALTER:	DAC ARCWID(X2)
	LAC XLO,X1↔LAC XHI,X2↔CAMLE XLO,XHI↔EXCH XLO,XHI
	LAC XHI↔SUB XLO↔FLOAT
	LAC DEL,ARCWID(XHI)↔FSBR DEL,ARCWID(XLO)↔FDVR DEL,0
	LAC ARCWID(XLO)↔AOS XLO
L5:	CAML XLO,XHI↔POP0J
	FADR DEL↔DAC ARCWID(XLO)↔AOJA XLO,L5

BEND AWIDTH;BGB 16 DECEMBER 1972 ---------------------------------
;XCART.		CART CONTROL COMMANDS.
SUBR(XCART)-------------------------------------------------------
BEGIN XCART
	OPDEF RADIO[7702B11]
	LAC 2,CHR	;INITIAL COMMAND CHARACTER.
	CAIN 2,"V"↔GO L0
	SKIPE CTRL↔TRO 2,200↔SKIPA ;SHIT.
M0:	INCHRW 2	;WAIT FOR COMMAND CHARACTER.
	DZM CNT0↔DZM CNT1 ;ZIP TIME OF ANY PREVIOUS COMMAND.
	DZM CTRL↔TRZE 2,200↔SETOM CTRL
	DAC 2,CHR
	SLACI 0,=5	;ONE-THIRD OF A SECOND.

;DRIVE ONE MINUTE FORWARDS OR BACKWARDS.
	CAIN 2,"F"↔GO[LAC 1,[(=900)12]↔GO M1]
	CAIN 2,"B"↔GO[LAC 1,[(=900)12]↔LAPI 0,2↔GO M1]
	SKIPE CTRL↔GO .+5

;STEERING 5 SECONDS LEFT OR RIGHT.
	CAIN 2,"L"↔GO[LAC 1,[(=75)11]↔LAPI 1↔GO M1]
	CAIN 2,"R"↔GO[LAC 1,[(=75)11]↔LAPI 0↔GO M1]

;CAMERA PAN 10 SECONDS LEFT OR RIGHT.
	CAIN 2,"L"↔GO[LAC 1,[(=150)14]↔GO M1]
	CAIN 2,"R"↔GO[LAC 1,[(=150)14]↔LAPI 0,4↔GO M1]

	CAIN 2,"0"↔GO M0  			;HALT WITH SPACEWAR RUNNING.
	CAIN 2," "↔GO M0  			;HALT WITH SPACEWAR RUNNING.
EX:	DZM FIREUP#↔SPCWAR'SSW'↔CRLF↔POP0J
	
M1:	HLRZM 0,CNT0 ↔ DAPZ 0,WORD0
	HLRZM 1,CNT1 ↔ DAPZ 1,WORD1

;FIREUP SPACE WAR MODULE - FOUR TICK SERVICE.
	SKIPE FIREUP↔GO M0↔SETOM FIREUP
	SPCWAR 4,SWJOB↔GO M0
	;CART SPACE WAR JOB.
;FIRE UP SPACE WAR JOB.
L0:	DZM CNT0↔DZM CNT1
	SPCWAR 4,SWJOB
	OUTCHR["*"]↔LACI 7↔DAC WORD2

;OLDE DIAGONOSTIC TTY LISTEN LOOP.
L1:	INCHRW↔CAIN "X"↔GO EX
	CAIGE"0"↔GO L2
	CAILE"8"↔GO L2
	ANDI 7↔DAC WORD2↔GO L1
L2:	CAIGE"A"↔GO L3
	CAILE"H"↔ANDI 7
	IORI 10↔DAC WORD2↔GO L1
L3:	CAIN 15↔OUTCHR["*"]↔GO L1
	
; SPACE WAR OUTPUT TO RADIO TRANSMITTER.

SWJOB: 	CONSZ 40↔DISMIS			  ;MAKE SURE WE ARE ON THE PDP-6.
	SKIPE 1,WORD3↔GO[
	DATAO 500,WORD3↔CALLI 400024]	;ROTATE TURN TABLE.
	SOSLE CNT0↔GO[LAC WORD0↔GO L5]↔DZM CNT0
	SOSLE CNT1↔GO[LAC WORD1↔GO L5]↔DZM CNT1
	LAC WORD2
L5:	TRNE 8↔RADIO 400054;	1 SELECT ACTION RELAYS.
	TRNN 8↔RADIO 620054;	0 SELECT DIRECTION RELAYS.
	TRNE 1↔RADIO 440053;	1 STEERING MOTOR.
	TRNN 1↔RADIO 620053;	0 ;
	TRNE 2↔RADIO 410052;	1 DRIVE MOTOR.
	TRNN 2↔RADIO 600052;	0 ;
	TRNE 4↔RADIO 360051;	1 CAMERA PAN MOTOR.
	TRNN 4↔RADIO 570051;	0;
	RADIO 340050
	RADIO 340055
	DISMIS			;EXIT SPACEWAR JOB.
	DECLARE{WORD0,WORD1,WORD2,WORD3,CNT0,CNT1}
BEND XCART; BGB 18 DECEMBER 1972 ---------------------------------
XHELP:
	CALL(TVHELP,[[SIXBIT/CAREYEHLP/↔0↔SIXBIT/DOCBGB/]])
	POP0J

SUBR(TVHELP)FILLOC
BEGIN TVHELP
	EXTERNAL DPYSET,DPYOUT,DPYBIG,DPYBRT,AIVECT,RIVECT,DTYO,DPYBUF
	SETZM INHDR
	INIT 17,↔SIXBIT/DSK/↔INHDR
	GO [FATAL(CAN'T INIT DSK)]
	MOVEI 1,2↔HRL 1,ARG1↔BLT 1,5
	LOOKUP 17,2
	GO [ OUTSTR[ASCIZ/HELP FILE NOT FOUND.
/]↔	     POP1J ]
	PUSH P,121
	PUSH P,44
	MOVE 1,44
	MOVEM 1,121
LOOP:	USETI 17,1
	SETSTS 17,0
	LACI 0,2
	MOVEM 0,PAGNUM#
	SOJLE 0,FOUND
PGLOOP:	CALL(GETCHR)
	GO [ OUTSTR[ASCIZ/PAGE NOT FOUND.
/]↔	     GO RET]
	CAIE 1,14
	JRST PGLOOP
	JRST PGLOOP-1
FOUND:	CALL(DPYSET,DPYBUF)
	CALL(AIVECT,[0],[=440])
	CALL(DPYBIG,[1])
	CALL(DPYBRT,[1])
	SETZM LPOS#
CHLOOP:	CALL(GETCHR)↔GO FIN
	CAIN 1,14↔GO FIN
	CAIN 1,11↔GO [ CALL(DTYO,[40])
	     AOS 1,LPOS
	     TRNE 1,7
	     GO $.-4
	     GO CHLOOP ]
	CALL(DTYO,1)
	AOS LPOS
	MOVE 1,1(P)
	CAIE 1,15
	GO CHLOOP
	SETZM LPOS
	CALL(RIVECT,[1000],[0])
	GO CHLOOP
FIN:	CALL(DPYOUT,[16])
	OUTSTR[ASCIZ/	TYPE <META>Z TO MAKE HELP GO AWAY./]
RET:	RELEASE 17,
	POP P,121
	MOVE 1,121
	CORE 1,↔GO [ FATAL(CAN'T SHRINK CORE) ]
	POP P,121
	POP1J

GETCHR:
	SOSG INHDR+2
	IN 17,↔GO[ILDB 1,INHDR+1↔AOS(P)↔POP0J ]
	POP0J
INHDR:	BLOCK 3
BEND TVHELP

END SA